\section{用SageMath计算举例}

\begin{frame}[fragile]{阶梯形}
 矩阵行化简得到阶梯形在线性代数的计算中是基本的。
 解线性方程组、找极大线性无关组等都需要。
 矩阵的 \mintinline{sage}{echelon_form()} 方法可求出一个阶梯形，
 而 \mintinline{sage}{rref()} 方法可求出既约的阶梯形。

\begin{minted}[texcl]{sage}
sage: A=matrix([[5,1,2,8],[2,-1,1,2],[3,2,3,8],[0,8,-1,7]])
sage: A
[ 5  1  2  8]
[ 2 -1  1  2]
[ 3  2  3  8]
[ 0  8 -1  7]
sage: A.echelon_form()
[1 0 0 1]
[0 1 0 1]
[0 0 1 1]
[0 0 0 0]
sage: A.rref()
[1 0 0 1]
[0 1 0 1]
[0 0 1 1]
[0 0 0 0]
\end{minted}

\end{frame}



\begin{frame}[fragile]{极大线性无关组}
    考虑向量组$\alpha_1, \alpha_2, \alpha_3, \alpha_4, \alpha_5$, 其中
  \[
    \begin{gathered}
      \alpha_1=(1,0,-1,-1), \quad
      \alpha_2=(-1,1,2,-2),\quad
      \alpha_3=(3,-1,-4,0),\\
      \alpha_4=(2,2,1,1), \quad
      \alpha_5=(-9,2,10,-6).
    \end{gathered}
  \]
要求其一个极大线性无关组、秩，并用该极大线性无关组线性表出其他向量，
我们需要把 $\begin{pmatrix}
    \alpha_1^{\rT} & \alpha_2^{\rT} & \alpha_3^{\rT} & \alpha_4^{\rT} & \alpha_5^{\rT}
\end{pmatrix}$ 行化简至既约的阶梯形。
\begin{minted}[texcl]{sage}
sage: A=matrix([[1,-1,3,2,-9],[0,1,-1,2,2],[-1,2,-4,1,10],[-1,-2,0,1,-6]])
sage: A
[ 1 -1  3  2 -9]
[ 0  1 -1  2  2]
[-1  2 -4  1 10]
[-1 -2  0  1 -6]
sage: A.rref()
[ 1  0  2  0 -3]
[ 0  1 -1  0  4]
[ 0  0  0  1 -1]
[ 0  0  0  0  0]
\end{minted}
由此可知，所给向量组的一个极大线性无关组为$\alpha_1, \alpha_2, \alpha_4$, 
所给向量组的秩为 $3$, 
且 
\[
  \alpha_3=2\alpha_1-\alpha_2, \quad \alpha_5=-3\alpha_1+4\alpha_2-\alpha_4.
\]
\end{frame}

\begin{frame}[fragile]{求解线性方程组}
  \mintinline{sage}{solve()} 函数一般地用于解方程，包括线性方程组。
\end{frame}

\begin{frame}[fragile]{求解带参数的线性方程组}
  
  考虑带参数$t_1,\cdots,t_k$的数域$P$上的线性方程组时，
  可以把系数想成取自于$P[t_1,\cdots,t_k]$或其分式域$P(t_1,\cdots,t_k)$.
  例如，考虑线性方程组
  \[
  \left\{
\begin{array}{rrrl}
(\lambda+3)x_1 & + x_2 & + 2x_3&= \lambda\\
\lambda x_1 & +(\lambda-1)x_2 & +x_3 &= 2\lambda\\
3(\lambda+1)x_1  & +\lambda x_2 &+(\lambda+3)x_3 &=  3\lambda.
\end{array}
\right.
  \]
  系数行列式非零时有唯一解；而系数行列式等于$0$相当于$\lambda$满足一个多项式方程，
  这样的$\lambda$只有有限多个，我们可以逐个讨论。

\begin{minted}[texcl]{sage}
sage: R.<t> = QQ[]
sage: A=matrix([[t+3, 1, 2], [t, t-1, 1], [3*(t+1), t, t+3]])  # 定义系数矩阵
sage: b=vector([t,2*t,3*t])  # 定义常数列
sage: A
[  t + 3       1       2]
[      t   t - 1       1]
[3*t + 3       t   t + 3]
sage: b
(t, 2*t, 3*t)
sage: A.det().factor()  # 计算系数行列式，并找其根
(t - 1) * t^2
\end{minted}
\end{frame}

\begin{frame}[fragile]

\begin{minted}[texcl]{sage}
sage: A0=A.subs(t=0)  # 考虑$t=0$的情形
sage: b0=b.subs(t=0)
sage: A0.solve_right(b0)  # 一个特解$X=(0,0,0)$
(0, 0, 0)
sage: A0.right_kernel()  # 基础解系 $\eta=(1,-1,-1)$
Vector space of degree 3 and dimension 1 over Rational Field
Basis matrix:
[ 1 -1 -1]
# 故而$t=0$时通解为$c(1,-1,-1)$
sage: A1=A.subs(t=1)  # 考虑$t=1$的情形
sage: b1=b.subs(b=1)
sage: A1.solve_right(b1)  # $t=1$时无解
# 这里省略了漫长的追踪错误的信息
# 也可通过求出矩阵 (A1 b1) 的既约的阶梯形来自己判断
ValueError: matrix equation has no solutions
sage: K = R.fraction_field();
sage: A.change_ring(K)  # 把系数环从$\bQ[t]$换成函数域$\bQ(t)$ 
[  t + 3       1       2]
[      t   t - 1       1]
[3*t + 3       t   t + 3]
sage: A.solve_right(b)  # 求解（此时是唯一解）
((t - 3)/(t - 1), (t + 3)/(t - 1), (-t + 3)/(t - 1))
\end{minted}

\end{frame}

